package pers.cj.pdos.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import pers.cj.pdos.entity.InGoodsAnalysis;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author chenj
 * @since 2020-03-25
 */
public interface InGoodsAnalysisMapper extends BaseMapper<InGoodsAnalysis> {
    Map getTotalData(@Param("companyId") String companyId,
                     @Param("storeId") String storeId,
                     @Param("houseId") String houseId,
                     @Param("date1") Date date1,
                     @Param("date2") Date date2);

    Map getHighGoods(@Param("companyId") String companyId,
                     @Param("storeId") String storeId,
                     @Param("houseId") String houseId,
                     @Param("date1") Date date1,
                     @Param("date2") Date date2);

    Map getHighProvider(@Param("companyId") String companyId,
                      @Param("storeId") String storeId,
                      @Param("houseId") String houseId,
                      @Param("date1") Date date1,
                      @Param("date2") Date date2);

    List<InGoodsAnalysis> listStoreData(@Param("companyId") String companyId,
                                             @Param("page") Integer page,
                                             @Param("limit") Integer limit,
                                             @Param("storeId") String storeId,
                                             @Param("houseId") String houseId,
                                             @Param("date1") Date date1,
                                             @Param("date2") Date date2);

    List<InGoodsAnalysis> listHouseData(@Param("companyId") String companyId,
                                             @Param("page") Integer page,
                                             @Param("limit") Integer limit,
                                             @Param("storeId") String storeId,
                                             @Param("houseId") String houseId,
                                             @Param("date1") Date date1,
                                             @Param("date2") Date date2);

    List<InGoodsAnalysis> listGoodsData(@Param("companyId") String companyId,
                                             @Param("page") Integer page,
                                             @Param("limit") Integer limit,
                                             @Param("storeId") String storeId,
                                             @Param("houseId") String houseId,
                                             @Param("providerId") String providerId,
                                             @Param("date1") Date date1,
                                             @Param("date2") Date date2,
                                             @Param("typeId") String typeId,
                                             @Param("filterZero") Boolean filterZero,
                                             @Param("search") String search);

    Long countGoodsData(@Param("companyId") String companyId,
                        @Param("storeId") String storeId,
                        @Param("houseId") String houseId,
                        @Param("providerId") String providerId,
                        @Param("date1") Date date1,
                        @Param("date2") Date date2,
                        @Param("typeId") String typeId,
                        @Param("filterZero") Boolean filterZero,
                        @Param("search") String search);

    List<InGoodsAnalysis> listProviderData(@Param("companyId") String companyId,
                                                 @Param("page") Integer page,
                                                 @Param("limit") Integer limit,
                                                 @Param("storeId") String storeId,
                                                 @Param("houseId") String houseId,
                                                 @Param("date1") Date date1,
                                                 @Param("date2") Date date2,
                                                 @Param("providerIdTypeId") String providerIdTypeId,
                                                 @Param("filterZero") Boolean filterZero,
                                                 @Param("search") String search);
    Long countProviderData(@Param("companyId") String companyId,
                         @Param("storeId") String storeId,
                         @Param("houseId") String houseId,
                         @Param("date1") Date date1,
                         @Param("date2") Date date2,
                         @Param("providerTypeId") String providerTypeId,
                         @Param("filterZero") Boolean filterZero,
                         @Param("search") String search);
    BigDecimal getTotalProvider(@Param("companyId") String companyId,
                              @Param("storeId") String storeId,
                              @Param("houseId") String houseId,
                              @Param("date1") Date date1,
                              @Param("date2") Date date2,
                              @Param("providerTypeId") String providerTypeId,
                              @Param("filterZero") Boolean filterZero,
                              @Param("search") String search);

    List<InGoodsAnalysis> listOrderData(@Param("companyId") String companyId,
                                             @Param("page") Integer page,
                                             @Param("limit") Integer limit,
                                             @Param("storeId") String storeId,
                                             @Param("houseId") String houseId,
                                             @Param("date1") Date date1,
                                             @Param("date2") Date date2);

    Long countOrderData(@Param("companyId") String companyId,
                        @Param("storeId") String storeId,
                        @Param("houseId") String houseId,
                        @Param("date1") Date date1,
                        @Param("date2") Date date2);

    List<InGoodsAnalysis> listGoodsDetailDataByOrder(@Param("companyId") String companyId,
                                                                    @Param("goodsId") String goodsId,
                                                                    @Param("page") Integer page,
                                                                    @Param("limit") Integer limit,
                                                                    @Param("storeId") String storeId,
                                                                    @Param("houseId") String houseId,
                                                                    @Param("date1") Date date1,
                                                                    @Param("date2") Date date2,
                                                                    @Param("search") String search);
    Long countGoodsDetailDataByOrder(@Param("companyId") String companyId,
                                     @Param("goodsId") String goodsId,
                                     @Param("storeId") String storeId,
                                     @Param("houseId") String houseId,
                                     @Param("date1") Date date1,
                                     @Param("date2") Date date2,
                                     @Param("search") String search);


    List<InGoodsAnalysis> listGoodsDetailDataByProvider(@Param("companyId") String companyId,
                                                                      @Param("goodsId") String goodsId,
                                                                      @Param("page") Integer page,
                                                                      @Param("limit") Integer limit,
                                                                      @Param("storeId") String storeId,
                                                                      @Param("houseId") String houseId,
                                                                      @Param("date1") Date date1,
                                                                      @Param("date2") Date date2,
                                                                      @Param("search") String search);
    Long countGoodsDetailDataByProvider(@Param("companyId") String companyId,
                                      @Param("goodsId") String goodsId,
                                      @Param("storeId") String storeId,
                                      @Param("houseId") String houseId,
                                      @Param("date1") Date date1,
                                      @Param("date2") Date date2,
                                      @Param("search") String search);

    /**
     * 获取商品的退货单的最大和最小时间
     * @param companyId
     * @param goodsId
     * @param storeId
     * @param houseId
     * @return
     */
    Map getMaxMinDate(@Param("companyId") String companyId,
                      @Param("goodsId") String goodsId,
                      @Param("providerId") String providerId,
                      @Param("storeId") String storeId,
                      @Param("houseId") String houseId);

    /**
     * 按照年份获取退货额
     * @param companyId
     * @param goodsId
     * @param storeId
     * @param houseId
     * @param date1
     * @param date2
     * @return
     */
    List<Map> getTotalByYear(@Param("companyId") String companyId,
                             @Param("goodsId") String goodsId,
                             @Param("providerId") String providerId,
                             @Param("storeId") String storeId,
                             @Param("houseId") String houseId,
                             @Param("date1") Date date1,
                             @Param("date2") Date date2);

    /**
     * 按照月份获取退货额
     * @param companyId
     * @param goodsId
     * @param storeId
     * @param houseId
     * @param date1
     * @param date2
     * @return
     */
    List<Map> getTotalByMonth(@Param("companyId") String companyId,
                              @Param("goodsId") String goodsId,
                              @Param("providerId") String providerId,
                              @Param("storeId") String storeId,
                              @Param("houseId") String houseId,
                              @Param("date1") Date date1,
                              @Param("date2") Date date2);

    /**
     * 按照日获取退货额
     * @param companyId
     * @param goodsId
     * @param storeId
     * @param houseId
     * @param date1
     * @param date2
     * @return
     */
    List<Map> getTotalByDate(@Param("companyId") String companyId,
                             @Param("goodsId") String goodsId,
                             @Param("providerId") String providerId,
                             @Param("storeId") String storeId,
                             @Param("houseId") String houseId,
                             @Param("date1") Date date1,
                             @Param("date2") Date date2);
}


